﻿using System;
using System.ComponentModel;
using System.Drawing;

namespace Kyoh.Lib.WinForms
{
    /// <summary>プログレスバーの表示スタイルを管理するクラス。</summary>
    [TypeConverter(typeof(ExpandableObjectConverter))]
    public class FlatProgressBarAppearance : ICloneable
    {
        /// <summary><see cref="FlatProgressBarAppearance"/> クラスの新しいインスタンスを初期化します。</summary>
        public FlatProgressBarAppearance()
        {
            Rounded = true;
            BorderColor = Color.Transparent;
            BorderWeight = 0;
            BackColor = Color.Transparent;
            ForeColor = Color.YellowGreen;
        }

        internal void SetValues(FlatProgressBarAppearance values)
        {
            Rounded = values.Rounded;
            BorderColor = values.BorderColor;
            BorderWeight = values.BorderWeight;
            BackColor = values.BackColor;
            ForeColor = values.ForeColor;
        }

        /// <summary>プログレスバーを角丸で表示するかどうかを取得・設定します。</summary>
        [Browsable(true)]
        [EditorBrowsable(EditorBrowsableState.Always)]
        [DefaultValue(true)]
        public bool Rounded { get; set; }
        /// <summary>プログレスバーの枠線の色を取得・設定します。</summary>
        [DefaultValue(typeof(Color), "Transparent")]
        [Browsable(true)]
        [EditorBrowsable(EditorBrowsableState.Always)]
        public Color BorderColor { get; set; }
        /// <summary>プログレスバーの枠線の太さを取得・設定します。</summary>
        [DefaultValue(1)]
        [Browsable(true)]
        [EditorBrowsable(EditorBrowsableState.Always)]
        public int BorderWeight { get; set; }
        /// <summary>プログレスバーの背景色を取得・設定します。</summary>
        [DefaultValue(typeof(Color), "Transparent")]
        [Browsable(true)]
        [EditorBrowsable(EditorBrowsableState.Always)]
        public Color BackColor { get; set; }
        /// <summary>プログレスバーの前景色を取得・設定します。</summary>
        [DefaultValue(typeof(Color), "YellowGreen")]
        [Browsable(true)]
        [EditorBrowsable(EditorBrowsableState.Always)]
        public Color ForeColor { get; set; }

        #region ICloneable メンバー

        /// <summary>
        /// 現在のインスタンスのコピーである新しいオブジェクトを作成します。
        /// </summary>
        /// <returns>
        /// このインスタンスのコピーである新しいオブジェクト。
        /// </returns>
        /// <filterpriority>2</filterpriority>
        public object Clone()
        {
            return new FlatProgressBarAppearance()
            {
                Rounded = Rounded,
                BorderColor = BorderColor,
                BorderWeight = BorderWeight,
                BackColor = BackColor,
                ForeColor = ForeColor,
            };
        }

        #endregion
    }
}
